package com.alorma.github.sdk.services.repo; import android.text.TextUtils; import android.util.Base64; import com.alorma.github.sdk.bean.dto.request.RequestMarkdownDTO; import com.alorma.github.sdk.bean.dto.response.Content; import com.alorma.github.sdk.bean.info.RepoInfo; import com.alorma.github.sdk.services.content.GetMarkdownClient; import java.io.UnsupportedEncodingException; import retrofit.RestAdapter; import rx.Observable; /** * Created by Bernat on 20/07/2014. */ public class GetReadmeContentsClient extends GithubRepoClient<String> { public GetReadmeContentsClient(RepoInfo info) { super(info); } @Override protected Observable<String> getApiObservable(RestAdapter restAdapter) { RepoService repoService = restAdapter.create(RepoService.class); Observable<Content> contentObservable; if (getBranch() == null) { contentObservable = repoService.readme(getOwner(), getRepo()); } else { contentObservable = repoService.readme(getOwner(), getRepo(), getBranch()); } return contentObservable.filter( content -> content != null && !TextUtils.isEmpty(content.content)) .filter(content -> "base64".equals(content.encoding)) .map(content -> { byte[] data = Base64.decode(content.content, Base64.DEFAULT); try { content.content = new String(data, "UTF-8"); return content.content; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return ""; }) .filter(s -> !TextUtils.isEmpty(s)) .map(s -> { RequestMarkdownDTO requestMarkdownDTO = new RequestMarkdownDTO(); requestMarkdownDTO.text = s; return requestMarkdownDTO; }) .flatMap(requestMarkdownDTO -> new GetMarkdownClient(requestMarkdownDTO).observable()); } }